CC=g++
#CFLAGS=-Wall -I. -pg
CFLAGS=-O3
DEPS=nanovoid.h union_find_delete.h SuperFastHash.h cxxopts.hpp grain_growth.hpp enum_hash.hpp nanovoid_app.h
OBJS=PNBucket.o  LSH.o  union_find_delete.o HashTable.o   OneStep.o grain_growth.o grain_growth_back.o grain_growth_test_tool.o enum_hash.o SuperFastHash.o Nanovoid.o normal_nanovoid.o test_nanovoid_tool.o

install_root=/home/chonghao/cxx_abi_libtorch/libtorch

SRC_FILES := $(wildcard ./*.cpp)
SRC_FILES := $(filter-out ./grain_growth_torch.cpp, $(SRC_FILES))

default: test_spinodal test_grain_growth test_nanovoid

%.o: SRC_FILES $(DEPS)
	$(CC) -c -o $@ $< $(CFLAGS)

test_spinodal: $(OBJS) test_spinodal.o  
	$(CC) -o test_spinodal $^ $(CFLAGS)

test_grain_growth: $(OBJS) test_grain_growth.o 
	$(CC) -o test_grain_growth $^ $(CFLAGS)

gg_test: $(OBJS) grain_growth_test.o 
	$(CC) -o gg_test $^ $(CFLAGS)

gg_show: $(OBJS) grain_growth_show.o 
	$(CC) -o gg_show $^ $(CFLAGS)

gg_show_torch: grain_growth_show_torch.cpp grain_growth.cpp grain_growth_back.cpp grain_growth_test_tool.cpp PNBucket.cpp HashTable.cpp LSH.cpp enum_hash.cpp SuperFastHash.cpp Nanovoid.cpp OneStep.cpp union_find_delete.cpp
	$(CC) -g -O3 -o gg_show_torch grain_growth_show_torch.cpp grain_growth.cpp grain_growth_back.cpp grain_growth_test_tool.cpp PNBucket.cpp HashTable.cpp LSH.cpp enum_hash.cpp SuperFastHash.cpp Nanovoid.cpp OneStep.cpp union_find_delete.cpp -lm -lpng -I${install_root}/include -I${install_root}/include/torch/csrc/api/include -D_GLIBCXX_USE_CXX11_ABI=1 -std=gnu++14 -L${install_root}/lib -Wl,-R${install_root}/lib -ltorch -ltorch_cpu -lc10

gg_intuition: $(OBJS) grain_growth_intuition.o 
	$(CC) -o gg_intuition $^ $(CFLAGS)

gg_torch: grain_growth_torch.cpp grain_growth.cpp grain_growth_back.cpp grain_growth_test_tool.cpp PNBucket.cpp HashTable.cpp LSH.cpp enum_hash.cpp SuperFastHash.cpp Nanovoid.cpp OneStep.cpp union_find_delete.cpp
	$(CC) -g -O3 -o gg_torch grain_growth_torch.cpp grain_growth.cpp grain_growth_back.cpp grain_growth_test_tool.cpp PNBucket.cpp HashTable.cpp LSH.cpp enum_hash.cpp SuperFastHash.cpp Nanovoid.cpp OneStep.cpp union_find_delete.cpp -lm -lpng -I${install_root}/include -I${install_root}/include/torch/csrc/api/include -D_GLIBCXX_USE_CXX11_ABI=1 -std=gnu++14 -L${install_root}/lib -Wl,-R${install_root}/lib -ltorch -ltorch_cpu -lc10

test_nanovoid: $(OBJS) test_nanovoid.o 
	$(CC) -o test_nanovoid $^ $(CFLAGS)

clean:
	rm *.o test_spinodal test_grain_growth test_nanovoid gg_torch gg_test gg_show gg_intuition gg_show_torch
